#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/wait.h>

#define N 10
//waitpid最佳使用
int main()
{
    pid_t id = fork();
    if(id == 0)
    {
        int cnt = 3;
        while(cnt)
        {
            cnt--;
            printf("子进程: %d\n", getpid());
            sleep(1);
        }
        exit(0);
    }
    int status = 0;
    pid_t rid = waitpid(id, &status, 0);
    if(rid > 0)
    {
        printf("wait success!\n");
        if(WIFEXITED(status))
        {
            printf("正常运行结束：%d\n", WEXITSTATUS(status));
        }
        else{
          printf("进程运行异常!\n");
        }
    }
    return 0;
}

//int main()
//{
//    int i = 0;
//    for(; i < N ; i++)
//    { 
//        pid_t id = fork();
//        if(id == 0)
//        {
//            int i = 3;
//            while(1)
//            {
//                printf("我是一个子进程, pid = %d, ppid = %d, count: %d\n", getpid(), getppid(), i);
//                sleep(3);
//                //int a = 10;
//                //a /= 0;
//                int* p = NULL;
//                *p = 100;
//                sleep(1);
//                i--;
//            }
//
//            printf("子进程退出!\n");
//            int ret = 1;
//            if(ret == 0)
//              exit(0);
//            else
//              exit(1);
//        }
//    } 
//    printf("父进程等待子进程退出\n");
//    sleep(5);
//    for(i = 0; i < N; i++)
//    {
//       //pid_t rid = wait(NULL);
//       int status = 0;
//        pid_t rid = waitpid(-1, &status, 0);
//        if(rid > 0)
//        {
//            printf("父进程等待子进程成功，子进程pid: %d, status: %d, exit code: %d, exit signal: %d\n",
//                rid, status, (status>>8)&0xFF, (status & 0x7F));
//        }
//    }
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//    //pid_t id = fork();
//    //if(id == 0)
//    //{
//    //    int i = 10;
//    //    while(i)
//    //    {
//    //        printf("我是一个子进程, pid = %d, ppid = %d, count: %d\n", getpid(), getppid(), i);
//    //        sleep(1);
//    //        i--;
//    //    }
//    //    printf("子进程退出!\n");
//    //    exit(1);
//    //}
//    //
//    //sleep(15);
//    //printf("父进程等待子进程退出\n");
//    //pid_t rid = wait(NULL);
//    //if(rid > 0)
//    //{
//    //    printf("父进程等待子进程成功，子进程pid: %d\n", rid);
//    //    sleep(5);
//    //}
//    return 0;
//}
